# test01_re.py
# 编写函数count_log，分析日志文件apache_log.txt
# count_log('apache_log.txt')
# 统计出每个客户端的访问次数
# 将统计的结果使用字典方式显示出来
# {'1.2.3.4': 1, '122.48.56.231': 2}
#  (\d{1,3}\.){3}\d{1,3}
# 循环读取日志文件中的每一行，通过正则表达式获取IP地址
# IP地址正则表达式
import re
def count_log(file):
    # 定义字典，用于保存每个IP地址访问次数
    ip_dict = {}
    # 将IP地址正则字符串编译为正则表达式对象
    re_obj = re.compile('(\d{1,3}\.){3}\d{1,3}')
    with open(file, mode='r') as fr:
        # 循环读取每一行日志
        while True:
            line = fr.readline()
            if not line:
                break
            # 使用正则表达式对象匹配出每一行日志中的IP地址
            ip = re_obj.search(line).group()
            # print(ip)
            # 判断字典中是否有当前这个IP，如果不存在添加进取赋值为1，否则已经存在让它的值加1
            if ip not in ip_dict:
                ip_dict[ip] = 1
            else:
                ip_dict[ip] += 1
    # 当循环结束后，返回字典
    return ip_dict
if __name__ == '__main__':
    print(count_log('apache_log.txt'))

